#include "st-focus-manager.h"
-struct _StFocusManagerPrivate
+typedef struct _StFocusManager
{
+ GObject parent;
+
ClutterStage *stage;
GHashTable *groups;
-};
+} StFocusManager;
-G_DEFINE_TYPE_WITH_PRIVATE (StFocusManager, st_focus_manager, G_TYPE_OBJECT)
+G_DEFINE_FINAL_TYPE (StFocusManager, st_focus_manager, G_TYPE_OBJECT)
static void
st_focus_manager_dispose (GObject *object)
{
StFocusManager *manager = ST_FOCUS_MANAGER (object);
- if (manager->priv->groups)
- {
- g_hash_table_destroy (manager->priv->groups);
- manager->priv->groups = NULL;
- }
+ g_clear_pointer (&manager->groups, g_hash_table_destroy);
G_OBJECT_CLASS (st_focus_manager_parent_class)->dispose (object);
}
static void
st_focus_manager_init (StFocusManager *manager)
{
- manager->priv = st_focus_manager_get_instance_private (manager);
- manager->priv->groups = g_hash_table_new (NULL, NULL);
+ manager->groups = g_hash_table_new (NULL, NULL);
}
static gboolean
for (group = focused; group != stage; group = clutter_actor_get_parent (group))
{
- if (g_hash_table_lookup (manager->priv->groups, group))
+ if (g_hash_table_lookup (manager->groups, group))
{
return st_widget_navigate_focus (ST_WIDGET (group), focused,
direction, wrap_around);
if (!manager)
{
manager = g_object_new (ST_TYPE_FOCUS_MANAGER, NULL);
- manager->priv->stage = stage;
+ manager->stage = stage;
g_object_set_data_full (G_OBJECT (stage), "st-focus-manager",
manager, g_object_unref);
st_focus_manager_add_group (StFocusManager *manager,
StWidget *root)
{
- gpointer count_p = g_hash_table_lookup (manager->priv->groups, root);
+ gpointer count_p = g_hash_table_lookup (manager->groups, root);
int count = count_p ? GPOINTER_TO_INT (count_p) : 0;
g_signal_connect (root, "destroy",
G_CALLBACK (remove_destroyed_group),
manager);
- g_hash_table_insert (manager->priv->groups, root, GINT_TO_POINTER (++count));
+ g_hash_table_insert (manager->groups, root, GINT_TO_POINTER (++count));
}
/**
st_focus_manager_remove_group (StFocusManager *manager,
StWidget *root)
{
- gpointer count_p = g_hash_table_lookup (manager->priv->groups, root);
+ gpointer count_p = g_hash_table_lookup (manager->groups, root);
int count = count_p ? GPOINTER_TO_INT (count_p) : 0;
if (count == 0)
return;
if (count == 1)
- g_hash_table_remove (manager->priv->groups, root);
+ g_hash_table_remove (manager->groups, root);
else
- g_hash_table_insert (manager->priv->groups, root, GINT_TO_POINTER(--count));
+ g_hash_table_insert (manager->groups, root, GINT_TO_POINTER(--count));
}
/**
{
ClutterActor *actor = CLUTTER_ACTOR (widget);
- while (actor && !g_hash_table_lookup (manager->priv->groups, actor))
+ while (actor && !g_hash_table_lookup (manager->groups, actor))
actor = clutter_actor_get_parent (actor);
return ST_WIDGET (actor);
if (clutter_event_type (event) != CLUTTER_KEY_PRESS)
return FALSE;
- return st_focus_manager_stage_event (CLUTTER_ACTOR (manager->priv->stage),
+ return st_focus_manager_stage_event (CLUTTER_ACTOR (manager->stage),
event, manager);
}